package com.starhub.application.collection.client;

import com.starhub.application.collection.annotation.CollectionClient;
import com.starhub.application.collection.common.EmbeddingHelper;
import com.starhub.application.collection.common.MilvusCreationHelper;
import com.starhub.application.collection.dto.DataDefinitionDto;
import com.starhub.application.collection.dto.DataManipulationDto;
import com.starhub.application.collection.enums.CollectionTypeEnums;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 知识问答表客户端实现
 * @version: V1.0
 * @author: liuhf
 * @time 2025-06-06
 */
@Component
@CollectionClient(CollectionTypeEnums.QA_DATA)
public class QADataClient implements CollectionClientInterface {
    
    @Autowired
    private MilvusCreationHelper milvusCreationHelper;
    
    @Autowired
    private EmbeddingHelper embeddingHelper;
    
    /**
     * 创建知识问答表 知识问答的数据结构跟主数据表是一样的 分片策略默认有区别（主数据表分片策略是根据业务类型，知识问答表长度切片模式）
     * @param collection 知识库表信息
     * @return 是否创建成功
     */
    @Override
    public boolean createCollection(DataDefinitionDto collection) {
        try {
            milvusCreationHelper.createDefaultCollection(collection);
        } catch (Exception e) {
            throw new RuntimeException("创建Milvus集合失败: " + e.getMessage(), e);
        }
        return true;
    }
    
    /**
     * 添加字段
     * @param collection 知识库表信息
     * @return 是否添加成功
     */
    @Override
    public boolean addFields(DataDefinitionDto collection) {
        // TODO: 实现主数据表的添加字段逻辑
        return true;
    }

    /**
     * 删除知识库表
     * @param collection 知识库表信息
     * @return 是否删除成功
     */
    @Override
    public boolean deleteCollection(DataDefinitionDto collection) {
        // TODO: 实现知识问答表的删除逻辑
        return true;
    }

    /**
     * 保存数据
     * @param dataManipulationDto 数据操作DTO
     */
    @Override
    public String saveData(DataManipulationDto dataManipulationDto) {
        embeddingHelper.embeddingData(dataManipulationDto);
        return dataManipulationDto.getItemId();
    }


    /**
     * 更新数据
     * @param dataManipulationDto 数据操作DTO
     * @return 数据ID
     */
    @Override
    public boolean updateData(DataManipulationDto dataManipulationDto) { 
        return embeddingHelper.embeddingUpdateData(dataManipulationDto);
    }

    /**
     * 删除数据
     * @param dataManipulationDto 数据操作DTO
     * @return 是否删除成功
     */
    @Override
    public boolean deleteData(DataManipulationDto dataManipulationDto) {
        return embeddingHelper.embeddingDeleteData(dataManipulationDto);
    }
} 